//
//  STUserAccountViewModel.swift
//  STVVeibo
//
//  Created by leergou on 16/7/22.
//  Copyright © 2016年 WhiteHouse. All rights reserved.
//

import UIKit

class STUserAccountViewModel: NSObject {
    
    // 路径
    let file = (NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last! as NSString).stringByAppendingPathComponent("userAccount.archiver")
    
    // 全局访问点
    static let sharedUserAccountTools:STUserAccountViewModel = STUserAccountViewModel()
    
    // 创建一个用户模型
    var userAccount: STUserAccount?
    
    // 创建一个accessToken - 计算型属性
    var accessToken: String?{
        
        // 代表用户有accessToken
        if userAccount?.access_token != nil {
            
            // 判断是否过期
            if userAccount?.expires_date?.compare(NSDate()) == NSComparisonResult.OrderedDescending {
                // 表示没过期
                return userAccount?.access_token
            } else {
                // 过期了
                return nil
            }
            
        } else {
            // 代表用户没有accessToken
            return nil
        }
    }
    
    // 记录用户是否登录 - 通过 accessToken判断
    var isLogin: Bool{
        
        return accessToken != nil
    }
    
    // 重写 init 构造方法,程序开始的时候 从本地拿出用户信息
    override init() {
        super.init()
        userAccount = getUserAccount()
        
    }
}

//MARK: - 归档解档
extension STUserAccountViewModel{
    
    func saveUserAccount(userAccount: STUserAccount){
        
        // 解决第一次登录后,跳转bug,默认还是会跳到未登录的 main,所以在跳转前要修改登录状态的标记,给 userAccount 赋值 即可
        self.userAccount = userAccount
        
        NSKeyedArchiver.archiveRootObject(userAccount, toFile: file)
    }
    
    func getUserAccount()->STUserAccount?{
        
        let result = NSKeyedUnarchiver.unarchiveObjectWithFile(file) as? STUserAccount
        return result
    }
}

//MARK: -请求数据
extension STUserAccountViewModel{
    
    // 请求userAccount
    func loadUserAccount(code: String, isSuccess:(isSucc: Bool)->()){
        STNetworkTools.shardTools.oauthLoadUserAccount(code, success: { (response) -> () in
            
//            print(response)
            
            // 判断 response 是否为 nil,而且是否可转成字典
            guard let res = response as? [String: AnyObject] else {
                isSuccess(isSucc: false)
                return
            }
            let userAccount = STUserAccount(dict: res)
            
            // 用得到 的 access_token 获取 用户信息
            self.loadUserInfo(userAccount, isSuccess: isSuccess)
            
            }) { (error) -> () in
                print("请求失败\(error)")
        }
    }
    
    // 请求用户信息
    func loadUserInfo(userAccount: STUserAccount, isSuccess:(isSucc: Bool)->()){
        
        STNetworkTools.shardTools.oauthLoadUserInfo(userAccount, success: { (response) -> () in
            
            guard let res = response else{
                return
            }
            // 取出其中的 用户昵称 和用户头像,存入模型
            userAccount.screen_name = res["screen_name"] as? String
            userAccount.avatar_large = res["avatar_large"] as? String
            isSuccess(isSucc: true)
            // 归档用户信息
            self.saveUserAccount(userAccount)
           
            }) { (error) -> () in
                 print("false:\(error)")
        }

    }

}